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 PHP7 (7.0.15) (judge verdict: Accepted)

<?php

const MOD = 1000000007;

fscanf(STDIN, "%d", $N);
$list = explode(" ", trim(fgets(STDIN)));
function eratosthenes5($max) {

    $sqrt = floor(sqrt($max));

    $lists = array_fill(2, $max-1, 0);

    for ($i=2; $i<=$sqrt; $i++) {
        if (isset($lists[$i])) {
            for ($j=$i*2; $j<=$max; $j+=$i) {
                unset($lists[$j]);
            }
        }
    }

    return $lists;
}
$map = eratosthenes5(1000000);
$data = array_keys($map);
foreach($list as $value){
    if(isset($map[$value])){
        if($map[$value] ==0){
            $map[$value] = 1;
        }
    }else{
        $temp = [];
        foreach($data as $d_value){
            while($value % $d_value == 0){
                $value /= $d_value;
                @$temp[$d_value] += 1;
            }
            if($value == 1){
                foreach($temp as $key => $value){
                    $map[$key] = max($map[$key], $value);
                }
                break;
            }
        }
    }
}
$sum = 1;
foreach ($map as $key => $value){
    for($i=0;$i<$value;$i++){
        $sum = $sum * $key % MOD;
    }
}
$ans = 0;
foreach($list as $value){
    $temp = ($sum * pow_mod($value,MOD-2, MOD)) % MOD;
    $ans = ($ans + $temp) % MOD;
}
echo $ans % MOD;


function pow_mod($x, $n, $mod){
    $ans = 1;
    $bin = decbin($n);
    $pos = strlen($bin);
    while ($pos > 0) {
        if ($bin[$pos - 1] == 1) {
            $ans = ($ans * $x) % $mod;
        }
        $x = ($x * $x) % $mod;
        $pos--;
    }
    return $ans;
}