#include<bits/stdc++.h>
#define ll          long long int
#define lld          long double
#define pb          push_back
#define pii         pair<ll,ll>
#define mi          map<ll,ll>
#define vec         vector<ll>
#define all(a)     (a).begin(),(a).end()
#define F           first
#define S           second
#define mod         1000000007
#define rep(i,a,b)	for(ll  i=a;i<b;i++)
#define repi(i,a,b)	for(ll  i=a;i<=b;i++)
#define per(i,a,b)  for(ll i=a;i>=b;i--)
#define mp          make_pair
#define mit         map<ll,ll>::iterator
#define sit         set<ll>::iterator
#define pit         pair<ll,ll>::iterator
#define tr(container, it) for(__typeof(container.begin()) it = container.begin(); it != container.end(); it++)
using namespace std;
ll xo(ll x, ll y) 
{ 
   return (x | y) & (~x | ~y); 
}  
ll bin_Expo(ll x,ll n)
{
		if(x==0)
		return 0;
    if(n==0)
        return 1;
    else if(n%2 == 0)        //n is even
        return bin_Expo(x*x,n/2);
    else                             //n is odd
        return x*bin_Expo(x*x,(n-1)/2);
}
ll mod_Expo(ll x,ll n,ll M)
{
		if(x==0)
		return 0;
    if(n==0)
        return 1;
    else if(n%2 == 0)        //n is even
        return mod_Expo((x*x)%M,n/2,M);
    else                             //n is odd
        return (x*mod_Expo((x*x)%M,(n-1)/2,M))%M;
 
}
ll NcR(int n, int r) 
{ 
    ll p = 1, k = 1; 
    if (n - r < r) 
        r = n - r; 
  
    if (r != 0) { 
        while (r) { 
            p *= n; 
            k *= r; 
            ll m=__gcd(p, k); 
            p /= m; 
            k /= m; 
            n--; 
            r--; 
        } 
    } 
    else
        p = 1; 
    return p;
}
bool prime_check(ll x)
{
    bool prime = (x >= 2);
    for (ll i = 2; i * i <= x; i++) 
    {
        if (x % i == 0) 
        {
            prime = false;
            break;
        }
    }
    return prime;
}
ll logg(ll base,ll x)
{
    return (ll)(log(x)/log(base));
}
int MA = pow(10, 6);
vector<bool> pf(MA + 1, true);
vector<long long> prim;
ll pow1(ll x,ll y)
{
	if(y==0)
	return 1;
	ll ans=1;
	while(y)
	{
		if(y%2)
		ans=(ans*x)%mod;
		x=(x*x)%mod;
		y=y/2;
	}
	return ans;
}
int main()
{
	pf[0] = pf[1] = false;
    for (int i = 2; i <= MA; i++) {
        if (pf[i]) {
            prim.push_back(i);
            for (int j = i + i; j <= MA; j+=i) {
                pf[j] = false;
            }
        }
    }
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int TESTS=1;
//	cin>>TESTS;
    while(TESTS--)
    {
    	ll i,j,l,m,k,ans,ans1,h,b,x,y,n,m1;
    	cin>>n;
    	ll a[n];
    	rep(i,0,n)
    	cin>>a[i];
		m=prim.size();
// 		ll lcm[m];
		map<ll,ll> lcm;
        // rep(i,0,m)
        // lcm[i]=0;
    	rep(i,0,n)
    	{
    		k=a[i];
    		m1=lower_bound(all(prim),a[i])-prim.begin();
    		m1=min(m1,m-1);
    		repi(xx,0,m1)
    		{
    		    if(pf[k])
    		    {
    		        lcm[k]=max(lcm[k],k);
    		        break;
    		    }
    			j=prim[xx];
    			x=0;
    			h=1;
				while(true)
				{
					if(k<2)
					break;
					if(k%j==0)
					{
						k=k/j;
						x++;
						h=(h*prim[xx])%mod;
					}
					else
					break;
				}
				if(x>0)
				lcm[j]=max(lcm[j],h);
				if(k<2)
				break;
			}
		}
		ans=0;ans1=1; ll ans2=0;
// 		rep(j,0,m)
// 		{
// 			if(lcm[j]!=0)
// 			ans1=(ans1*(lcm[j]))%mod;
// 		}
        tr(lcm,it)
        ans1=(ans1*(it->S))%mod;
		rep(i,0,n)
		{
			ans2=(ans1*pow1(a[i],mod-2))%mod;
			ans=(ans+ans2)%mod;
		}
		cout<<ans;
    } 
	return 0;
}

Measured memory_bytes: 1780