#include <bits/stdc++.h>
using namespace std;
template <class T>
using V = vector<T>;
template <class T>
using VV = V<V<T>>;
constexpr long long TEN(int n) { return (n == 0) ? 1 : 10 * TEN(n - 1); }
template <class T, class U>
void chmin(T& t, const U& u) {
  if (t > u) t = u;
}
template <class T, class U>
void chmax(T& t, const U& u) {
  if (t < u) t = u;
}
template <class T, class U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  os << "(" << p.first << "," << p.second << ")";
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  os << "{";
  for (int i = 0; i < (v.size()); i++) {
    if (i) os << ",";
    os << v[i];
  }
  os << "}";
  return os;
}
const int maxn = 100010;
const long long inf = -TEN(18);
long long dp[maxn][3];
int main() {
  for (int i = 0; i < (maxn); i++)
    for (int j = 0; j < (3); j++) {
      dp[i][j] = inf;
    }
  dp[0][0] = 0;
  int N;
  cin >> N;
  for (int i = 0; i < (N); i++) {
    bool neg = 0;
    if (i > 0) {
      string s;
      cin >> s;
      if (s == "-") {
        neg = 1;
      }
    }
    int x;
    cin >> x;
    long long tmp[3];
    for (int j = 0; j < (3); j++) tmp[j] = dp[i][j];
    for (int j = 1; j >= 0; --j) {
      chmax(tmp[j], tmp[j + 1]);
    }
    for (int j = 0; j < (3); j++)
      if (tmp[j] != inf) {
        tmp[j] += ((j + neg) % 2 == 1) ? -x : x;
      }
    if (neg) {
      for (int j = 0; j < (2); j++) {
        chmax(tmp[j + 1], tmp[j]);
      }
    }
    for (int j = 0; j < (3); j++) dp[i + 1][j] = tmp[j];
  }
  cout << max({dp[N][0], dp[N][1], dp[N][2]}) << endl;
  return 0;
}
