#include <bits/stdc++.h>
using namespace std;
int maxTwoNonOverlappingSubarraysSum(const vector<int>& nums) {
    int n = nums.size() - 1;
    if (n <= 0) return 0;

    vector<int> leftBest(n + 2, 0);
    vector<int> rightBest(n + 2, 0);

    // Single pass left-to-right (Kadane + Running Max merged)
    int currMax = 0;
    int globalMax = INT_MIN;
    for (int i = 1; i <= n; ++i) {
        currMax = max(nums[i], currMax + nums[i]);
        globalMax = max(globalMax, currMax);
        leftBest[i] = globalMax;
    }

    // Single pass right-to-left
    currMax = 0;
    globalMax = INT_MIN;
    for (int i = n; i >= 1; --i) {
        currMax = max(nums[i], currMax + nums[i]);
        globalMax = max(globalMax, currMax);
        rightBest[i] = globalMax;
    }

    // Find optimal split point
    int result = 0;
    for (int i = 1; i < n; ++i) {
        result = max(result, leftBest[i] + rightBest[i + 1]);
    }

    return result;
}
int main(){
	int n;
	cin>>n;
	vector<int>a(n+1);
	for(int i = 1 ; i<= n;i++){
		cin>>a[i];
	}
	cout<<maxTwoNonOverlappingSubarraysSum(a);
}