#include<bits/stdc++.h>
#define ll long long int
#define w(t) ll t;cin>>t;while(t--)
#define f(i,a,b) for(ll i=a;i<b;i++)
#define scana(arr) for(ll i=0,i<n;i++) cin>>arr[i];
#define vl vector<ll>
#define vpl vector< pair<ll,ll> >
#define pb push_back
#define mod 1000000007
using namespace std;
bitset<10000000> b;
vl primes,factors;
void sieve(){
b[0]=b[1]=1;
b.set(); //sets all the bits as 1
for(long long int i=2;i<=10000000;i++){
if(b[i]){
primes.push_back(i);
for(long long int j=i*i;j<=10000000;j+=i){
b[j]=0;
}
}
}
}
void prime_factors_sieve_approach(ll n){
ll count=0;
for(ll i=0;i<primes.size();i++){
ll x=primes[i];
if(x*x>n) break;
if(n%x==0){
if((n/x)==x) factors.pb(x);
else{
factors.pb(x);
factors.pb(n/x);
}
}
}
factors.pb(n);
}
ll prime_factors_util(ll n){
ll count=0,divisors=1;
for(ll i=0;i<primes.size();i++){
ll x=primes[i];
if(x*x>n) break;
if(n%x==0){
count=0;
while(n%x==0){
n/=x;
count++;
}
divisors*=((count+1)%mod);
}
}
if(n!=1) divisors=((divisors)%mod*(2)%mod)%mod;
divisors%=mod;
return divisors%mod;
}
ll fast_modulo_exponentation(ll a,ll b){
ll ans=1;
while(b){
if(b&1){
ans=((ans%mod)*(a%mod))%mod;
}
a=((a%mod)*(a%mod))%mod;
b>>=1;
}
ans%=mod;
return ans%mod;
}
int main(){
sieve();
ll n;
cin>>n;
ll arr[n];
ll N=1,divisors=1;
f(i,0,n){
cin>>arr[i];
N=((N%mod)*(fast_modulo_exponentation(primes[i],arr[i])%mod))%mod;
divisors*=(arr[i]+1);
}
ll P=fast_modulo_exponentation(N,divisors/2);
ll ans=prime_factors_util(P);
cout<<ans%mod<<endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CiNkZWZpbmUgdyh0KSBsbCB0O2Npbj4+dDt3aGlsZSh0LS0pCiNkZWZpbmUgZihpLGEsYikgZm9yKGxsIGk9YTtpPGI7aSsrKQojZGVmaW5lIHNjYW5hKGFycikgZm9yKGxsIGk9MCxpPG47aSsrKSBjaW4+PmFycltpXTsKI2RlZmluZSB2bCB2ZWN0b3I8bGw+CiNkZWZpbmUgdnBsIHZlY3RvcjwgcGFpcjxsbCxsbD4gPgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJpdHNldDwxMDAwMDAwMD4gYjsKdmwgcHJpbWVzLGZhY3RvcnM7Cgp2b2lkIHNpZXZlKCl7CgliWzBdPWJbMV09MTsKCWIuc2V0KCk7IC8vc2V0cyBhbGwgdGhlIGJpdHMgYXMgMQkKCWZvcihsb25nIGxvbmcgaW50IGk9MjtpPD0xMDAwMDAwMDtpKyspewoJCWlmKGJbaV0pewoJCQlwcmltZXMucHVzaF9iYWNrKGkpOwoJCQlmb3IobG9uZyBsb25nIGludCBqPWkqaTtqPD0xMDAwMDAwMDtqKz1pKXsKCQkJCWJbal09MDsJCgkJCX0KCQl9Cgl9Cn0KCnZvaWQgcHJpbWVfZmFjdG9yc19zaWV2ZV9hcHByb2FjaChsbCBuKXsKICAgIGxsIGNvdW50PTA7CiAgICBmb3IobGwgaT0wO2k8cHJpbWVzLnNpemUoKTtpKyspewogICAgICAgIGxsIHg9cHJpbWVzW2ldOwogICAgICAgIGlmKHgqeD5uKSBicmVhazsKICAgICAgICBpZihuJXg9PTApewogICAgICAgICAgICBpZigobi94KT09eCkgZmFjdG9ycy5wYih4KTsKICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIGZhY3RvcnMucGIoeCk7CiAgICAgICAgICAgICAgICBmYWN0b3JzLnBiKG4veCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmYWN0b3JzLnBiKG4pOwp9CgpsbCBwcmltZV9mYWN0b3JzX3V0aWwobGwgbil7CiAgICBsbCBjb3VudD0wLGRpdmlzb3JzPTE7CiAgICBmb3IobGwgaT0wO2k8cHJpbWVzLnNpemUoKTtpKyspewogICAgICAgIGxsIHg9cHJpbWVzW2ldOwogICAgICAgIGlmKHgqeD5uKSBicmVhazsKICAgICAgICBpZihuJXg9PTApewogICAgICAgICAgICBjb3VudD0wOwogICAgICAgICAgICB3aGlsZShuJXg9PTApewogICAgICAgICAgICAgICAgbi89eDsKICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGl2aXNvcnMqPSgoY291bnQrMSklbW9kKTsKICAgICAgICB9CiAgICB9CgogICAgaWYobiE9MSkgZGl2aXNvcnM9KChkaXZpc29ycyklbW9kKigyKSVtb2QpJW1vZDsKICAgIGRpdmlzb3JzJT1tb2Q7CiAgICByZXR1cm4gZGl2aXNvcnMlbW9kOwp9CgpsbCBmYXN0X21vZHVsb19leHBvbmVudGF0aW9uKGxsIGEsbGwgYil7CiAgICBsbCBhbnM9MTsKICAgIHdoaWxlKGIpewogICAgICAgIGlmKGImMSl7CiAgICAgICAgICAgIGFucz0oKGFucyVtb2QpKihhJW1vZCkpJW1vZDsKICAgICAgICB9CiAgICAgICAgYT0oKGElbW9kKSooYSVtb2QpKSVtb2Q7CiAgICAgICAgYj4+PTE7CiAgICB9CiAgICBhbnMlPW1vZDsKICAgIHJldHVybiBhbnMlbW9kOwp9CiAgICAgICAgICAgICAgICAgICAgIAppbnQgbWFpbigpewogICAgc2lldmUoKTsKICAgIGxsIG47CiAgICBjaW4+Pm47CiAgICBsbCBhcnJbbl07CiAgICBsbCBOPTEsZGl2aXNvcnM9MTsKICAgIGYoaSwwLG4pewogICAgICAgIGNpbj4+YXJyW2ldOwogICAgICAgIE49KChOJW1vZCkqKGZhc3RfbW9kdWxvX2V4cG9uZW50YXRpb24ocHJpbWVzW2ldLGFycltpXSklbW9kKSklbW9kOwogICAgICAgIGRpdmlzb3JzKj0oYXJyW2ldKzEpOwogICAgfQogICAgCiAgICBsbCBQPWZhc3RfbW9kdWxvX2V4cG9uZW50YXRpb24oTixkaXZpc29ycy8yKTsKICAgIGxsIGFucz1wcmltZV9mYWN0b3JzX3V0aWwoUCk7CiAgICBjb3V0PDxhbnMlbW9kPDxlbmRsOyAgICAKCiAgICByZXR1cm4gMDsKfQ==