```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
const MAX = 5000000
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
fmt.Fscan(in, &n)
freq := make([]int, MAX+1)
maxVal := 0
for i := 0; i < n; i++ {
var x int
fmt.Fscan(in, &x)
freq[x]++
if x > maxVal {
maxVal = x
}
}
cnt := make([]int, maxVal+1)
for i := 1; i <= maxVal; i++ {
for j := i; j <= maxVal; j += i {
cnt[i] += freq[j]
}
}
dp := make([]int64, maxVal+1)
for i := maxVal; i >= 1; i-- {
dp[i] = int64(cnt[i]) * int64(i)
for j := 2 * i; j <= maxVal; j += i {
val := dp[j] + int64(cnt[i]-cnt[j])*int64(i)
if val > dp[i] {
dp[i] = val
}
}
}
fmt.Fprintln(out, dp[1])
}
```