# エラトステネスを素因数分解とlcm





N = int(eval(input()))

A = list(map(int, input().split()))

mod = 10 ** 9 + 7



def inverse(a): #aに対し、a**(mod-2)、つまり逆元を返す

  T=[a]

  while 2**(len(T))<mod: #a**1,a**2.a**4,a**8,...を計算しておく

      T.append(T[-1]**2%mod)

  b=bin(mod-2) #mod-2を2進数表記にする

  ans=1

  for i in range(len(b)-2):

      if int(b[-i-1])==1:

          ans=ans*T[i]%mod

  return ans



def eratosthenes(n): #エラストテネスの篩(最大の素因数を格納した配列)

    A = [0] * n

    A[0], A[1] = -1, -1

    for i in range(2, n):

      if A[i] == 0:

        j = i

        while j < n:

          A[j] = i

          j += i

    return A



E = eratosthenes(10**6+5)

l = {}



for a in A:

  now = a

  f = [] #素因数格納配列



  while now > 1:

    f.append(E[now])

    now //= E[now]



  chk = 0 



  for p in f:

    if chk == p: #同じ素因数が複数あるときに飛ばす

      continue

    chk = p

    if p in list(l.keys()): #辞書に素因数がある場合、個数の多いほう

      l[p] = max(l[p], f.count(p))

    else: #辞書にない場合新規追加

      l[p] = f.count(p)

 

lcm = 1

for k in l:

  for i in range(l[k]):

      lcm= lcm * k % mod



s = 0

for i in range(N):

    s += lcm * inverse(A[i]) % mod

    s %= mod

print(s)
# エラトステネスを素因数分解とlcm





N = int(eval(input()))

A = list(map(int, input().split()))

mod = 10 ** 9 + 7



def inverse(a): #aに対し、a**(mod-2)、つまり逆元を返す

  return pow(a, mod-2, mod)



def eratosthenes(n): #エラストテネスの篩(最大の素因数を格納した配列)

    A = [0] * n

    A[0], A[1] = -1, -1

    for i in range(2, n):

      if A[i] == 0:

        j = i

        while j < n:

          A[j] = i

          j += i

    return A



E = eratosthenes(10**6+5)

l = {}



for a in A:

  now = a

  f = [] #素因数格納配列



  while now > 1:

    f.append(E[now])

    now //= E[now]



  chk = 0 



  for p in f:

    if chk == p: #同じ素因数が複数あるときに飛ばす

      continue

    chk = p

    if p in list(l.keys()): #辞書に素因数がある場合、個数の多いほう

      l[p] = max(l[p], f.count(p))

    else: #辞書にない場合新規追加

      l[p] = f.count(p)

 

lcm = 1

for k in l:

  for i in range(l[k]):

      lcm= lcm * k % mod



s = 0

for i in range(N):

    s += lcm * inverse(A[i])

    s %= mod

print(s)
# エラトステネスを素因数分解とlcm
N = int(eval(input()))
A = list(map(int, input().split()))
mod = 10**9 + 7


def inverse(a):  # aに対し、a**(mod-2)、つまり逆元を返す
    T = [a]
    while 2 ** (len(T)) < mod:  # a**1,a**2.a**4,a**8,...を計算しておく
        T.append(T[-1] ** 2 % mod)
    b = bin(mod - 2)  # mod-2を2進数表記にする
    ans = 1
    for i in range(len(b) - 2):
        if int(b[-i - 1]) == 1:
            ans = ans * T[i] % mod
    return ans


def eratosthenes(n):  # エラストテネスの篩(最大の素因数を格納した配列)
    A = [0] * n
    A[0], A[1] = -1, -1
    for i in range(2, n):
        if A[i] == 0:
            j = i
            while j < n:
                A[j] = i
                j += i
    return A


E = eratosthenes(10**6 + 5)
l = {}
for a in A:
    now = a
    f = []  # 素因数格納配列
    while now > 1:
        f.append(E[now])
        now //= E[now]
    chk = 0
    for p in f:
        if chk == p:  # 同じ素因数が複数あるときに飛ばす
            continue
        chk = p
        if p in list(l.keys()):  # 辞書に素因数がある場合、個数の多いほう
            l[p] = max(l[p], f.count(p))
        else:  # 辞書にない場合新規追加
            l[p] = f.count(p)
lcm = 1
for k in l:
    for i in range(l[k]):
        lcm = lcm * k % mod
s = 0
for i in range(N):
    s += lcm * inverse(A[i]) % mod
    s %= mod
print(s)

# エラトステネスを素因数分解とlcm
N = int(eval(input()))
A = list(map(int, input().split()))
mod = 10**9 + 7


def inverse(a):  # aに対し、a**(mod-2)、つまり逆元を返す
    return pow(a, mod - 2, mod)


def eratosthenes(n):  # エラストテネスの篩(最大の素因数を格納した配列)
    A = [0] * n
    A[0], A[1] = -1, -1
    for i in range(2, n):
        if A[i] == 0:
            j = i
            while j < n:
                A[j] = i
                j += i
    return A


E = eratosthenes(10**6 + 5)
l = {}
for a in A:
    now = a
    f = []  # 素因数格納配列
    while now > 1:
        f.append(E[now])
        now //= E[now]
    chk = 0
    for p in f:
        if chk == p:  # 同じ素因数が複数あるときに飛ばす
            continue
        chk = p
        if p in list(l.keys()):  # 辞書に素因数がある場合、個数の多いほう
            l[p] = max(l[p], f.count(p))
        else:  # 辞書にない場合新規追加
            l[p] = f.count(p)
lcm = 1
for k in l:
    for i in range(l[k]):
        lcm = lcm * k % mod
s = 0
for i in range(N):
    s += lcm * inverse(A[i])
    s %= mod
print(s)

-    T = [a] -    while 2 ** (len(T)) < mod:  # a**1,a**2.a**4,a**8,...を計算しておく -        T.append(T[-1] ** 2 % mod) -    b = bin(mod - 2)  # mod-2を2進数表記にする -    ans = 1 -    for i in range(len(b) - 2): -        if int(b[-i - 1]) == 1: -            ans = ans * T[i] % mod -    return ans +    return pow(a, mod - 2, mod) -    s += lcm * inverse(A[i]) % mod +    s += lcm * inverse(A[i])