Problem:
Score : 500 points

Problem Statement

Given are N positive integers A_1,...,A_N.

Consider positive integers B_1, ..., B_N that satisfy the following condition.

Condition: For any i, j such that 1 \leq i < j \leq N, A_i B_i = A_j B_j holds.

Find the minimum possible value of B_1 + ... + B_N for such B_1,...,B_N.

Since the answer can be enormous, print the sum modulo (10^9 +7).

Constraints

1 \leq N \leq 10^4

1 \leq A_i \leq 10^6

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 ... A_N

Output

Print the minimum possible value of B_1 + ... + B_N for B_1,...,B_N that satisfy the condition, modulo (10^9 +7).

Sample Input 1

3
2 3 4

Sample Output 1

13

Let B_1=6, B_2=4, and B_3=3, and the condition will be satisfied.

Sample Input 2

5
12 12 12 12 12

Sample Output 2

5

We can let all B_i be 1.

Sample Input 3

3
1000000 999999 999998

Sample Output 3

996989508

Print the sum modulo (10^9+7).

Solution in Python (3.4.3) (judge verdict: Runtime Error)

// Etavioxy
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define il inline
#define ll long long
#define rep(i,s,t) for(register int i=(s);i<=(t);i++)
#define rev_rep(i,s,t) for(register int i=(s);i>=(t);i--)
#define each(i,u) for(int i=head[u];i;i=bow[i].nxt)
#define file(s) freopen(s".in" ,"r",stdin),freopen(s".out","w",stdout)
#define pt(x) putchar(x)
using namespace std;
il int ci(){
	register char ch;int f=1;
	while(!isdigit(ch=getchar()))f=ch=='-'?-1:1;
	register int x=ch^'0';
	while(isdigit(ch=getchar()))x=(x*10)+(ch^'0');
	return f*x;
}

il ll gcd(ll a,ll b){ return b==0 ? a:gcd(b,a%b) ; }

template<typename T>
il bool chk_max(T&x,const T&y){
	if( x<y ){ x=y; return 1; }
	return 0;
}
const int mod = 1e9+7;

il ll qpow(ll a,ll b){
	ll ans= 1;
	for(; b; b>>=1,a=a*a%mod) if ( b&1 ) {
		ans= ans*a%mod;
	} return ans;
}
il ll inv(ll x){ return qpow(x,mod-2); }

#define Primes map<ll,int>
il Primes primes(ll n){
	int ed = sqrt(n);
	Primes ans;
	rep(i,2,ed) if( n%i==0 ){
		int cnt=0;
		while( n%i==0 ) cnt++, n/=i;
		ans[i]=cnt;
	}
	if( n!=1 ) ans[n]=1;
	return ans;
}

enum{N=10003};

ll a[N],b[N];
Primes mx,p[N];

int main(){
	int n=ci();
	rep(i,1,n) a[i] = ci();
	rep(i,1,n){
		p[i] = primes(a[i]);
		for(Primes::iterator it=p[i].begin();it!=p[i].end();it++)
			chk_max(mx[it->first],it->second);
	}
	rep(i,1,n){
		b[i] = 1;
		for(Primes::iterator it=p[i].begin();it!=p[i].end();it++){
			if( mx[it->first]==it->second ){
				b[i] *= qpow(it->first,it->second);
				mx[it->first] = -1;
			}
		}
	}
//	rep(i,1,n) printf("%lld ",b[i]); pt('\n');
	ll pro=1, ans=0;
	rep(i,1,n) pro=pro*b[i]%mod;
	rep(i,1,n) ans=(ans+pro*inv(a[i]))%mod;
	printf("%lld\n",(ans+mod)%mod);
	return 0;
}