#include <iostream>
using namespace std;
int maxCrossingSum(int nums[], int low, int mid, int high)
{
int left_sum = 1e-5;
int sum = 0;
for (int i = mid; i >= low; i--) {
sum += nums[i];
if (sum > left_sum) {
left_sum = sum;
}
}
int right_sum = 1e-5;
sum = 0;
for (int i = mid + 1; i <= high; i++) {
sum += nums[i];
if (sum > right_sum)
{
right_sum = sum;
}
}
return left_sum + right_sum;
}
int maxSubArraySum(int nums[], int low, int high) {
if (low == high)
{
return nums[low];
}
int mid = (low + high) / 2;
int left_max = maxSubArraySum(nums, low, mid);
int right_max = maxSubArraySum(nums, mid + 1, high);
int cross_max = maxCrossingSum(nums, low, mid, high);
return max(left_max, right_max, cross_max);
}
int main()
{
int n;
cin >> n;
int a[200001];
int i;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
int result = maxSubArraySum(a, 0,n-1);
cout<< result << endl;
return 0;
}