#include<cstdio>
using namespace std;
const int MAXN = 1000000;
long long dp[MAXN]; //dp数组
long long A[MAXN]; //接受输入的值
int MAX(int a, int b) { //返回两者较大的数
if(a > b) {
return a;
} else {
return b;
}
}
long long sum(int n) { //找出最大连续子序列
//1.dp[i]即以i为结尾的连续序列最大和
//2.确定递推公式 d[i] = MAX(dp[i-1] + A[i], A[i])
//3. 初始化
dp[0] = A[0];
//4.确定递推顺序,从前往后
/*5.举例推导递推公式
A[] = {1 -2 3 4 -10 6}
dp[0] = A[0] = 1
dp[1] = MAX(1 + -2, -2) = -1;
dp[2] = MAX(-1 + 3, 3) = 3;
dp[3] = MAX(3 + 4, 4) = 7;
dp[4] = MAX(7 + -10, -10) = -3;
dp[5] = MAX(-3 + 6, 6) = 6;
*/
for (int i = 1; i < n; ++i) {
dp[i] = MAX(dp[i - 1] + A[i], A[i]);
}
long long High = dp[0]; //遍历dp[]找出最大值
for(int i = 1; i < n; ++i) {
if(dp[i] > High) {
High = dp[i];
}
}
return High;
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
for (int i = 0; i < n; ++i) {
scanf("%lld", &A[i]);
}
long long result = sum(n);
printf("%lld\n", result);
}
return 0;
}