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

#include<bits/stdc++.h>
using namespace std;
int n ;
int a[10005];
int  f[1000005];
int z[1000005];
int cnt[1000005];
int now;
long long L=1;
int INF=1e9 +7;
int b[10005];

void find(int x)
{
	while(x!=1)
	{
		int d = z[f[x]], k=0;
		int dd = f[x];
		while (x%d == 0)
			x/=d, ++k;
		cnt[dd]=max(cnt[dd],k);
	}
}

long long pow_mod(long long x, long long y, long long k)
{
	if(y==0) return 1%k;
	if(y%2) return pow_mod(x,y-1,k)*x%k;
	return pow_mod(x*x%k,y/2,k);
}

int main()
{
	scanf("%d",&n);
	for(int i=2;i<=1000005;++i)
	{
		if(f[i]) continue;
		z[++now]=i;
		f[i]=now;
		for(int j=i+i;j<=1000005;j+=i)
		    f[j]=now;
	}
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&a[i]);
	    find(a[i]);
	}
	for(int i=1;i<=now;++i)
	{
		for(int j=1;j<=cnt[i];++j)
		    L*=z[i],L%=INF;
	}
	long long ans=0;
	for(int i=1;i<=n;++i)
	{
		b[i]=pow_mod(a[i],INF-2,INF);
		ans+=L*b[i]%INF;
		ans%=INF;
	}
	cout<<ans<<endl;
	return 0;
}