package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
n := readInt(in)
if n == 0 {
return
}
maxA := 0
a := make([]int, n)
for i := 0; i < n; i++ {
a[i] = readInt(in)
if a[i] > maxA {
maxA = a[i]
}
}
cnt := make([]int32, maxA+1)
for i := 0; i < n; i++ {
cnt[a[i]]++
}
isComp := make([]bool, maxA+1)
primes := make([]int32, 0)
for i := int32(2); i <= int32(maxA); i++ {
if !isComp[i] {
primes = append(primes, i)
for j := i * 2; j <= int32(maxA); j += i {
isComp[j] = true
}
}
}
for _, p := range primes {
for i := int32(maxA) / p; i >= 1; i-- {
cnt[i] += cnt[i*p]
}
}
dp := make([]int64, maxA+1)
for i := int32(1); i <= int32(maxA); i++ {
dp[i] = int64(cnt[i]) * int64(i)
}
for i := int32(maxA); i >= 1; i-- {
for _, p := range primes {
if i*p > int32(maxA) {
break
}
cand := dp[i*p] + int64(cnt[i]-cnt[i*p])*int64(i)
if cand > dp[i] {
dp[i] = cand
}
}
}
fmt.Println(dp[1])
}
func readInt(in *bufio.Reader) int {
n := 0
c, err := in.ReadByte()
if err != nil {
return 0
}
for c < '0' || c > '9' {
c, err = in.ReadByte()
if err != nil {
return 0
}
}
for c >= '0' && c <= '9' {
n = n*10 + int(c-'0')
c, err = in.ReadByte()
if err != nil {
break
}
}
return n
}