← Home
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
}