/* 
* ID: juryc
* PROG: Flatten
* LANG: C++
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod=1e9+7;
const int N = 1e6+1;
vector<int> mp(N,0);
vector<int> primes(N); 
ll gcd(ll a,ll b){
if(b==0) return a;
return gcd(b,a%b); 
}
ll powmod(ll a,ll b){
ll res=1; a%=mod;
while(b){
if(b&1) res=(res*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return res;
} 
ll sieve(){
ll res=1;
fill(primes.begin(),primes.end(),1); 
primes[0]=primes[1]=0; 
for(int i=2;i<N;i++){
if(primes[i]){
ll mx=0;
for(int j=i;j<N;j+=i){
primes[j]=0;
if(mp[j]){
ll cnt=0; ll tmp=j;
while(tmp%i==0){
cnt++,tmp/=i;
}
mx=max(mx,cnt); 
}
}
res=(res*powmod(i,mx))%mod;
}
}
return res;
}
int main(){
ll n; cin>>n;
vector<ll> v(n); 
for(ll& i : v) {cin>>i; mp[i]=1; }
ll lcm=sieve(),ans=0;
for(ll i: v){
ans=(ans+(lcm*powmod(i,mod-2))%mod)%mod;
}
cout<<ans<<"\n"; 
return 0;
}

 
