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: Wrong Answer)

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<string.h>
#include<algorithm>
#include <cmath>

using namespace std;
 

long long N,i,j,k,A[10000],Pa[10000][4000]={0},p[4000],X,jmax,num[4000],ans,MAX,a,b,c;

int main()
{
  cin >>N;
  
  for(i=0;i<N;i++)
  {
    cin>>A[i];
  }
  MAX=1000000007;
  p[0]=2;
  j=1;
  for(i=3;i<10000;i++)
  {
    X=1;
    for(k=0;k<j;k++)
    {
      if(i%p[k]==0)
      {
        X=0;
        break;
      }
    }
    if(X==0)
    {
      continue;
    }
    
    p[j]=i;
    j++;
    
  }
  jmax=j;
  
  for(i=0;i<N;i++)
  {
    X=A[i];
    for(j=0;p[j]<=X && j<jmax;j++)
    {
      while(X%p[j]==0)
      {
        Pa[i][j]++;
        X=X/p[j];
      }
      
    }
  }
  
  for(j=0;j<jmax;j++)
  {
    X=0;
    for(i=0;i<N;i++)
    {
      X=max(X,Pa[i][j]);
    }
    
    num[j]=X;
  }
  
  ans=0;
  
  for(i=0;i<N;i++)
  {
    X=1;
    for(j=0;j<jmax;j++)
    {
      k=num[j]-Pa[i][j];
      for(a=0;a<k;a++)
      {
        X=X*p[j];
        X=X%MAX;
      }
    }
    ans+=X;
    ans=ans%MAX;
  }
  cout<<ans;
  
  
}