import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        // 以下代码用于获取输入数据
        Scanner scan = new Scanner(System.in);
        String nStr = scan.nextLine(); // 输入正整数 n
        int n = Integer.valueOf(nStr); // 将 String 类型转换为 int 类型
        String numsStr = scan.nextLine(); // 输入 n 个整数
        String[] numsStrList =
            numsStr.split(" "); // 将这 n 个正整数用一个数组进行存储

        // 以下代码是 连续子数组的最大和 的具体实现
        int pre = Integer.valueOf(
                      numsStrList[0]); // 定义一个整型变量,用于存放以前一位结尾的数组的连续子数组的最大和
        int max = pre; // 定义一个整型变量,用于存放最终的输出结果
        for (int i = 2; i <= n; i++) {
            if (pre <=
                    0) { // 如果 pre 小于等于 0,那么我们认为它对我们是没有任何贡献的
                pre = Integer.valueOf(numsStrList[i - 1]);
            } else { // 如果 pre 大于 0,那么我们认为它对我们是有贡献的
                pre = pre + Integer.valueOf(numsStrList[i - 1]);
            }
            max = Math.max(max, pre); // 取最大值
        }
        System.out.println(max); // 输出结果
    }
}