// 贪心
// #include <iostream>
// using namespace std;
// int main(){
// int n, x;
// long long sum = 0;
// long long ans = -1e9; // 数据中有负数,初始化为0可能会将错误答案更新,必须初始化为负无穷
// cin >> n;
// while (n --){
// cin >> x;
// sum += x;
// if(sum > ans) ans = sum;
// if(sum < 0) sum = 0;
// }
// cout << ans;
// return 0;
// }
// DP
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 1000005;
LL f[N], num[N]; // f[N]表示以a[i]结尾的子序列的和
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i ++) cin >> num[i];
f[0] = -1e9;
// 状态计算:看i-1的序列加上num[i]还是num[i]本身自己这个子序列的大
// 比如 i-1是-5,num[i] = 4,那么我们更新的最大子序列的和就应该是4,而不是-1
for(int i = 1; i <= n; i ++){
f[i] = max(f[i - 1] + num[i], num[i]);
}
LL ans = -1e9;
for(int i = 1; i <= n; i ++) ans = max(ans,f[i]);
cout << ans << endl;
return 0;
}