#include <bits/stdc++.h>
using namespace std;
long long INIT = 1000000000000000L;
long long N;
long long A[100000];
char op[100000];
long long max_dp[100000];
long long min_dp[100000];
long long get_max(long long n);
long long get_min(long long n);
long long get_max(long long n) {
  if (n == N - 1) {
    if (op[n - 1] == '+') {
      return A[n];
    } else {
      return -A[n];
    }
  }
  if (max_dp[n] < INIT) {
    return max_dp[n];
  }
  long long res;
  if (n == 0 || op[n - 1] == '+') {
    res = A[n] + get_max(n + 1);
  } else {
    long long d1 = -A[n] + get_max(n + 1);
    long long d2 = -(A[n] + get_max(n + 1));
    long long d3 = -A[n] + get_min(n + 1);
    long long d4 = -(A[n] + get_min(n + 1));
    if (d1 >= d2 && d1 >= d3 && d1 >= d4) {
      res = d1;
    } else if (d2 >= d1 && d2 >= d3 && d2 >= d4) {
      res = d2;
    } else if (d3 >= d1 && d3 >= d2 && d3 >= d4) {
      res = d3;
    } else if (d4 >= d1 && d4 >= d2 && d4 >= d3) {
      res = d4;
    }
  }
  max_dp[n] = res;
  return res;
}
long long get_min(long long n) {
  if (n == N - 1) {
    if (op[n - 1] == '+') {
      return A[n];
    } else {
      return -A[n];
    }
  }
  if (min_dp[n] < INIT) {
    return min_dp[n];
  }
  long long res;
  if (n == 0 || op[n - 1] == '+') {
    res = A[n] + get_min(n + 1);
  } else {
    long long d1 = -A[n] + get_max(n + 1);
    long long d2 = -(A[n] + get_max(n + 1));
    long long d3 = -A[n] + get_min(n + 1);
    long long d4 = -(A[n] + get_min(n + 1));
    if (d1 <= d2 && d1 <= d3 && d1 <= d4) {
      res = d1;
    } else if (d2 <= d1 && d2 <= d3 && d2 <= d4) {
      res = d2;
    } else if (d3 <= d1 && d3 <= d2 && d3 <= d4) {
      res = d3;
    } else if (d4 <= d1 && d4 <= d2 && d4 <= d3) {
      res = d4;
    }
  }
  min_dp[n] = res;
  return res;
}
signed main() {
  cin >> N;
  for (long long i = 0; i < N; i++) {
    cin >> A[i];
    if (i < N - 1) cin >> op[i];
  }
  for (long long i = 0; i < N; i++) {
    max_dp[i] = INIT;
    min_dp[i] = INIT;
  }
  cout << get_max(0) << endl;
}
