#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct meeting_point{
int starting;
int ending;
};
meeting_point meet;
vector<int> initial_vector;
int number_of_elements;
int bestSum = INT32_MIN;
void solve_base_case(int high) {
if (bestSum < initial_vector[high])
{
bestSum = initial_vector[high];
meet.starting = meet.ending;
meet.ending = high;
}
}
void find_sum(int low, int high, int mid) {
int suf = 0;
int pre = 0;
int left;
int right;
int i;
int j;
int maximumSuffix = INT32_MIN;
int maximumPrefix = INT32_MIN;
for (i = mid; i >= low; i--) {
suf += initial_vector[i];
if (suf >= maximumSuffix) {
maximumSuffix = suf;
left = i;
}
}
for (j = mid + 1; j <= high; j++) {
pre += initial_vector[j];
if (pre > maximumPrefix) {
maximumPrefix = pre;
right = j;
}
}
if (maximumPrefix + maximumSuffix > bestSum)
{
bestSum = maximumPrefix + maximumSuffix;
meet.starting = left;
meet.ending = right;
}
}
void solve(int low, int high) {
if (high == low) {
solve_base_case(high);
return ;
}
int mid = low + (high - low)/2;
solve(low, mid);
solve(mid + 1, high);
find_sum(low, high, mid);
}
int main(void) {
int element;
ifstream in("ssm.in");
ofstream out("ssm.out");
in >> number_of_elements;
for(int i = 1; i <=number_of_elements; i++)
{
in >> element;
initial_vector.push_back(element);
}
solve(0, number_of_elements);
out << bestSum << " " << (meet.starting + 1) << " " << (meet.ending + 1);
in.close();
out.close();
return 0;
}