← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	counts := make([]int64, 100005)
	maxVal := 0

	for i := 0; i < n; i++ {
		scanner.Scan()
		val, _ := strconv.Atoi(scanner.Text())
		counts[val]++
		if val > maxVal {
			maxVal = val
		}
	}

	if maxVal == 0 {
		fmt.Println(0)
		return
	}

	dp := make([]int64, maxVal+1)
	dp[1] = counts[1]

	for i := 2; i <= maxVal; i++ {
		take := dp[i-2] + counts[i]*int64(i)
		skip := dp[i-1]
		if take > skip {
			dp[i] = take
		} else {
			dp[i] = skip
		}
	}

	fmt.Println(dp[maxVal])
}