穿越隧道
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#include <cmath>
using namespace std;
const int N = 1e6 + 10, mod = 1e9 + 7;
unordered_map<int,int> primes;
typedef long long ll;
int n;
int main(){
scanf("%d",&n);
while(n--){
int x;
scanf("%d",&x);
for(int i = 2; i <= x/i; i++){
while(x % i == 0){
x/=i;
primes[i]++;
}
}
if(x > 1) primes[x]++;
}
ll res = 0;
ll sum = 1;
unordered_map<int,int>::iterator it;
for(it = primes.begin(); it != primes.end(); it++){
int kk = it->second;
int val = it->first;
ll t = 1;
while(kk--){
t = (1 + t*val)%mod;
}
sum = (sum%mod)*(t%mod);
}
printf("%lld\n",sum%mod);
return 0;
}