← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	valSet := make(map[int]bool)
	valSet[0] = true
	for _, ai := range a {
		valSet[ai] = true
	}
	vals := make([]int, 0, len(valSet))
	for v := range valSet {
		vals = append(vals, v)
	}
	sort.Ints(vals)

	m := len(vals)
	best := make([]int64, m)

	for _, ai := range a {
		oldBest := make([]int64, m)
		copy(oldBest, best)

		prefixMax := int64(0)
		for i, v := range vals {
			if v > ai {
				break
			}
			if v == 0 {
				continue
			}
			cand := int64(v) + prefixMax
			if cand > best[i] {
				best[i] = cand
			}
			if oldBest[i] > prefixMax {
				prefixMax = oldBest[i]
			}
		}
	}

	var ans int64
	for _, v := range best {
		if v > ans {
			ans = v
		}
	}
	fmt.Println(ans)
}
```