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 <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define PI  3.14159265358979323846
#define M 1000000007
ll gcd(ll a,ll b)
{
    if(a==0)
        return b;
    else
        return gcd(b%a,a);
}
ll fast(ll n,ll a,ll m)
{
    if(n==0)
        return 1;
    else if(n==1)
        return a;
    else
    {
        ll res=fast(n/2,a,m)%m;
        if(n%2==0)
            return (((res%m)*(res%m))%m);
        else
            return (((((res%m)*a)%m)*res)%m);
    }
}
ll lcm(ll a,ll b)
{
    ll p=a*b;
    p/=gcd(a,b);
    return p;
}
const ll N=1e6;
ll b[N+1]={0};
int main()
{
    ll i,n,j;
    cin>>n;
    ll A[n],t=1;
    for(i=0;i<n;i++)
    {
        cin>>A[i];
        ll res=A[i];
        ll d=0;
        while(res%2==0)
        {
            d++;
            res/=2;
        }
        b[2]=max(b[2],d);
        for(ll j=3;j*j<=res;j+=2)
        {
            d=0;
            while(res%j==0)
            {
                res/=j;
                d++;
            }
            b[j]=max(b[j],d);
        }
        if(res>1)
        {
            b[res]=max(b[res],t);
        }

    }
     ll lcm=1;
     for(i=2;i<=1e6;i++)
     {
         if(b[i]!=0)
         {
             lcm=((lcm%M)*(fast(b[i],i,1e9+7)%M))%M;
         }
     }
     ll ans=0;
     for(i=0;i<n;i++)
     {
         ll inv=fast(1e9+5,A[i],1e9+7);
         inv=((inv%M)*(lcm%M))%M;
         ans=(ans%M+inv%M)%M;
     }
     cout<<ans;
}