import java.util.Scanner;
// dp动态规划
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int count = 0;
int []dp=new int [n];
// 注意 hasNext 和 hasNextLine 的区别
while ((count<n)&&in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
if(count == 0){//初始化
dp[count] = a;
}else{
if(dp[count-1]<=0){//连续数组块带上小于等于0的项,反而变小
dp[count] = a;
}else{//
dp[count] = dp[count-1]+a;
}
}
count += 1;
}
int ans = Integer.MIN_VALUE;
for(int x: dp){
ans = Math.max(ans, x);
}
System.out.println(ans);
}
}