#include <bits/stdc++.h>
using namespace std;
const int N = 5010;
int n;
long long a[N], sum[N], ans;
int d[3];
struct node {
  node() {}
  node(long long _val, int _d1, int _d2) : val(_val), d1(_d1), d2(_d2) {}
  long long val;
  int d1, d2;
};
node getmax(int l, int r) {
  long long ans = 0, temp = 0;
  int d1 = l, d2 = l;
  int ansd[3] = {0, l, l};
  for (int i = l; i < r; ++i) {
    temp += a[i];
    d2 = i + 1;
    if (temp < 0) {
      temp = 0;
      d1 = i + 1;
    }
    if (temp > ans) {
      ans = temp;
      ansd[1] = d1;
      ansd[2] = d2;
    }
  }
  return node(2 * ans - sum[r - 1] + 2 * (l == 0 ? 0 : sum[l - 1]), ansd[1],
              ansd[2]);
}
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  sum[0] = a[0];
  for (int i = 1; i < n; ++i) {
    sum[i] = sum[i - 1] + a[i];
  }
  ans = -1e18;
  for (int d0 = 0; d0 <= n; ++d0) {
    node temp = getmax(d0, n);
    if (temp.val > ans) {
      d[0] = d0;
      d[1] = temp.d1;
      d[2] = temp.d2;
      ans = temp.val;
    }
  }
  cout << d[0] << " " << d[1] << " " << d[2] << endl;
  return 0;
}
