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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mp make_pair
const ll mod=1e9+7;
typedef pair<int,int> pii;
typedef priority_queue<int,vector<int>,greater<int> > small_heap;
typedef priority_queue<int> big_heap;
int n;
ll a[10009];
ll mx[1000006];
ll power(ll aa,ll b)
{
    ll c=1;
    for(;b;b>>=1){
        if(b&1)c=c*aa%mod;
        aa=aa*aa%mod;
    }
    return c%mod;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
        ll x=a[i];
        for(ll v=2;v*v<=x;v++){
            if(x%v)continue;
            ll cur=0;
            while(x%v==0){
                cur++;
                x/=v;
            }
            mx[v]=max(mx[v],cur);
        }
        if(x!=1)mx[x]=max(mx[x],1ll);
    }
    ll lcm=1;
    for(ll i=1;i<=1000006;i++)
    {
        if(mx[i]) lcm = (lcm * power(i, mx[i])) % mod;
    }
    log(lcm);
//    for(int i=2;i<=n;i++){
//        ll x=power(a[i]*prelcm,1);
//        ll y=power(__gcd(a[i],prelcm),mod-2);
//        prelcm=x%mod*y%mod;prelcm%=mod;
//    }
    ll sum=0;
    for(int i=1;i<=n;i++){
        sum=(sum+power(lcm,1)%mod*power(a[i],mod-2)%mod)%mod;
    }
    cout<<sum<<endl;
    return 0;
}