本题要点:
1.秦九韶的多项式展开
2.学会划分因数
3.unordered_map的应用
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define dwn(i,a,b) for(int i=a;i>=b;--i)
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x=f?-x:x;}
inline void write(int n){if(n==0)return;write(n/10);putchar(n%10+'0');}
#define mem(a,b) memset(a,b,sizeof(a))
#define ee(i,u) for(int i=head[u];i;i=e[i].next)
const int mod=1e9+7;
unordered_map<int,int>p;
inline void count(int x){
for(int i=2;i*i<=x;++i){
while(x%i==0){
p[i]++;
x/=i;
}
}
if(x>1)p[x]++;
}
#undef int
int main(){
#define int long long
#ifdef WIN32
freopen("","r",stdin);
#endif
int n;rd(n);
rep(i,1,n){
int x;rd(x);
count(x);
}
int res=1;
for(unordered_map<int,int>::iterator it=p.begin();it!=p.end();++it){
int pp=it->first,a=it->second;
int t=1;
while(a--)
t=(t*pp+1)%mod;
res=res*t%mod;
}
printf("%lld",res%mod);
return 0;
}