```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)
}
```