package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
a := make([]int, n)
nxtMult := make([]int, 1000005)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
nxtMult[a[i]] = 1
}
M := make([]int, n)
isMatched := make(map[int]bool)
lastVisit := make([]int, 1000005)
lastChecked := make([]int, 1000005)
for j := range lastVisit {
lastVisit[j] = -1
lastChecked[j] = -1
}
q := make([]int, 0, n)
inS := make([]bool, n)
parent := make([]int, n)
for i := 0; i < n; i++ {
q = q[:0]
for j := 0; j <= i; j++ {
inS[j] = false
parent[j] = -1
}
q = append(q, i)
inS[i] = true
head := 0
for head < len(q) {
u := q[head]
head++
valU := a[u]
if lastVisit[valU] == i {
continue
}
lastVisit[valU] = i
for v := 0; v < i; v++ {
if !inS[v] && M[v]%valU == 0 {
inS[v] = true
parent[v] = u
q = append(q, v)
}
}
}
bestX := -1
bestU := -1
for _, u := range q {
val := a[u]
if lastChecked[val] == i {
continue
}
lastChecked[val] = i
k := nxtMult[val]
for isMatched[k*val] {
k++
}
nxtMult[val] = k
cand := k * val
if bestX == -1 || cand < bestX {
bestX = cand
bestU = u
}
}
curr := bestU
valToGive := bestX
for curr != i {
p := parent[curr]
nextValToGive := M[curr]
M[curr] = valToGive
valToGive = nextValToGive
curr = p
}
M[i] = valToGive
isMatched[bestX] = true
}
var totalSum int64
for _, val := range M {
totalSum += int64(val)
}
fmt.Println(totalSum)
}