package main

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

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

		// 设置大缓冲区,防止大输入时出错
		buf := make([]byte, 1024*1024) // 1MB
		scanner.Buffer(buf, 1024*1024)
		scanner.Split(bufio.ScanWords) // 按单词扫描(空格、换行等分隔)

		// 读取第一行:n
		scanner.Scan()
		n, _ := strconv.Atoi(scanner.Text())
		if n == 0 {
			break
		}

		arr := make([]int, n)
		for i := 0; i < n; i++ {
			scanner.Scan()
			arr[i], _ = strconv.Atoi(scanner.Text())
		}
		fmt.Println(process(arr))
	}
}

func process(arr []int) int {
	maxv := arr[0]
	pre := arr[0]
	for i := 1; i < len(arr); i++ {
	   // 在i位置处,求每个地方的最大值,只有2种可能性
	   // pre代表[0,i-1]处最大值,若pre大于等于0, i位置处最大值为pre+arr[i]
	   // 若pre小于0,i处最大值为arr[i]
		pre = max(pre+arr[i], arr[i])
		maxv = max(maxv, pre)
	}
	return maxv
}
func max(a, b int) int {
    if a>b {
        return a
    }
    return b
}