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 Java8 (OpenJDK 1.8.0) (judge verdict: Time Limit Exceeded)

import java.util.*;

public class Main {

    static long mod = 1_000_000_007L;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        int max = 0;
        for (int i = 0; i < n; i++) {
            a[i] = sc.nextInt();
            if(max < a[i]) max = a[i];
        }
        int k = (int)Math.sqrt(max) + 1;
        int[] d = new int[max];
        for (int i = 0; i < n; i++) {
            int x = a[i];
            int c = 2;
            int[] b = new int[max];
            while(1 < x){
                while(x % c == 0){
                    b[c]++;
                    x /= c;
                }
                if(d[c] < b[c]) d[c] = b[c];
                c++;
                if(k <= c)break;
            }
            if(1 < x){
                b[x]++;
                if(d[x] < b[x]) d[x] = b[x];
            }
        }
        long ans = 0L;
        for (int i = 0; i < n; i++) {
            long lcm = 1L;
            int x = a[i];
            for (int j = 2; j < max; j++) {
                for (int e = 0; e < d[j]; e++) {
                    if(x % j == 0) x /= j;
                    else lcm = (lcm * j)%mod;
                }
            }
            ans = (ans + lcm) %mod;
        }
        System.out.println(ans);
        sc.close();

    }


}