#include<bits/stdc++.h>
using namespace std;
int n;
const int MAXN=1e6+5;
long long a[MAXN];
long long cnt[MAXN];
long long MOD=1e9+7;
bool bo;
long long s[MAXN];
long long sum=1;
void fun(int x){
for(int i=2;i<=sqrt(x);i++){
while(x%i==0){
x/=i;
s[i]++;
}
if(s[i]%2!=0) cnt[i]++;//奇数个的次数
s[i]=0;
}
if(x>1) s[x]++;
if(s[x]%2!=0) cnt[x]++;
s[x]=0;
return;
}
long long mi(long long x,int num){
long long ans=1;
while(num){
if(num%2!=0){
ans=(ans*x)%MOD;
}
x=(x*x)%MOD;
num>>=1;
}
return ans;
}
int main(){
freopen("pingfang.in","r",stdin);
freopen("pingfang.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
fun(a[i]);
}
for(int i=2;i<=1e6+5;i++){
if(cnt[i]<n-cnt[i]){
sum=(sum*mi(i,cnt[i]))%MOD;
}else{
sum=(sum*mi(i,n-cnt[i]))%MOD;
}
}
cout<<sum%MOD<<endl;
return 0;
}