#include"bits/stdc++.h"
using namespace std;

#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define rep3(i,m,n) for(int (i)=m;(i)<=(n);(i)++)
#define rep3rev(i,m,n) for(int (i)=m;(i)>=(n);(i)--)
#define all(a) (a.begin()),(a.end())
#define rall(a) (a.rbegin()),(a.rend())
#define fi first
#define se second
#define pb push_back
#define eb emplace_back

using ll = long long;
using vll = vector<ll>;
using vi = vector<int>;
using vvi = vector<vector<int>>;
using P = pair<int, int>;
using PE = map<ll, int>;

/*** MOD CALCULATION ***/

const int MOD = 1e9+7;
const int MAX = 510000;

ll addM(ll a, ll b){
	return (a + b) % MOD;
}

ll mulM(ll a, ll b){
	ll temp = (a * b) % MOD;
  	while(temp<0){ temp += MOD; }
  	return temp;
}

ll powM(ll a, ll b){
	if(b == 0) return 1;
  	else if(b == 1) return a%MOD;
  	else if(b%2==0) return mulM(powM(a,b/2),powM(a,b/2));
  	else return mulM(a,mulM(powM(a,(b-1)/2),powM(a,(b-1)/2)));
}

// b^{-1} = b^{p-2} (mod p)
// a/b = a*b^{p-2} (mod p)
ll divM(ll a, ll b){ 
  	return mulM(a,powM(b,MOD-2));
}

// n!, (n!)^{-1} のテーブル作成
ll fac[MAX], finv[MAX], inv[MAX];
void COMBinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    rep3(i,2,MAX-1){
        fac[i] = fac[i-1] * i % MOD;
        inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv[i] = finv[i-1] * inv[i] % MOD;
    }
}

// 二項係数計算
ll COMB(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n-k] % MOD) % MOD;
}

/*** MOD CALCULATION ここまで ***/

PE factorize(ll n){
    PE ans;
    if(n == 1) return ans;
    for(ll i = 2; i*i <= n; i++){
        int cnt = 0;
        while(n%i == 0){
            cnt++;
            n /= i;
        }
        if(cnt) ans[i] = cnt;
    }
    if(n != 1) ans[n] = 1;
    return ans;
}

PE lcm(PE a, PE b){
    PE ans = a;
    for(auto pe : b){
        ll p = pe.fi;
        int e = pe.se;
        ans[p] = max(ans[p], e);
    }
    return ans;
}

PE unite(PE a, PE b){
    PE ans = a;
    for(auto pe : b){
        ll p = pe.fi;
        int e = pe.se;
        ans[p] += e;
    }
    return ans;
}

PE subt(PE a, PE b){
    PE ans = a;
    for(auto pe : b) {
        ll p = pe.fi;
        int e = pe.se;
        ans[p] -= e;
    }
    return ans;
}

void printPE(PE a){
    for(auto pe : a){
        ll p = pe.fi;
        int e = pe.se;
        if(e != 0) {
            cout << p << "^" << e << " * ";
            // if(p != (*(a.end())-1).fi) cout << " * ";
        }
    }
    cout << endl;
}

ll PEtoLLmod(PE a){
    ll ans = 1;    
    for(auto pe : a){
        auto p = pe.fi;
        auto e = pe.se;
        ans = mulM(ans, powM(p, e));
    }
    return ans;    
}

void Main() {
    int n; cin >> n;
    
    vi a(n);
    vector<PE> ape(n);
    
    PE L;  
    
    rep(i, n) {
        cin >> a[i];
        ape[i] = factorize(a[i]);
        for(auto pe : ape[i]){
            L[pe.fi] = max(L[pe.fi], pe.se);
        }
    }
    
    ll lcm_ = PEtoLLmod(L);
    
    // printPE(G);

    int ans = 0;
    rep(i, n) {
        //cout << L << " " << a[i] << " " << divM(L, a[i]) << endl;
        ans = addM(ans, divM(lcm_, a[i]));
    }
    
    cout << ans << endl;
    return;
}

int main() {
	cin.tie(nullptr);
	ios_base::sync_with_stdio(false);
	cout << fixed << setprecision(15);
	Main();
	return 0;
}

Measured memory_bytes: 3840