# ==========================
# === A - twiblr
# ==========================
"""
問題文
あなたは twiblr という SNS をしています。
twiblr では、フォロー数が 2×( フォロワー数 )+100 を超えない範囲でフォロー数を増やすことができます。
あなたの現在のフォロワー数は A で、フォロー数は B です。
フォロー数はあといくつ増やせますか?

制約
0≤A,B≤10000
B≤2×A+100
入力は全て整数
"""
A,B = map(int, input().split())
print(2 * A + 100 - B)

# ==========================
# === B - Almost GCD
# ==========================
"""
B - Almost GCD  / 
実行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 
200 点

問題文
数列 A (A1,A2,A3,…,AN) が与えられます。
正の整数 k の GCD 度を、A1,A2,A3,…,AN のうち k で割り切れるものの数と定義します。
2 以上の整数のうち GCD 度が最大になるものを一つ求めてください。 
GCD 度が最大のものが複数ある場合どれを出力しても構いません。

制約
1≤N≤100
2≤Ai≤1000
入力は全て整数
"""
N = int(input())
A = list(map(int, input().split()))
res = 0
ma = 0
for k in range(2, max(A)+1):
  cnt = 0
  for i in range(N):
    if A[i] % k == 0:
      cnt += 1
  if ma < cnt:
    ma = cnt
    res = k
print(res)

# ==========================
# === C - To 3
# ==========================
"""
問題文
各桁に 0 が出現しないような正の整数 N が与えられます。N の桁数を k とします。
N の桁を 0 個以上 k 個未満消して、残った桁をそのままの順序で結合することで 3 の倍数を作りたいです。
3 の倍数を作ることができるか判定し、作ることができるなら作るのに必要な最少の消す桁数を求めてください。

制約
1≤N<10**18
N は各桁に 0 が出現しない整数
"""
N = input()
K = len(N)
ans = K
for bit in range(1 << K):
  tmp = 0
  cnt = 0
  for j in range(K):
    if bit & (1 << j):
      tmp += int(N[j])
    else:
      cnt += 1
  if tmp % 3 == 0:
    ans = min(ans, cnt)
if ans == K:
  print(-1)
else:
  print(ans)

# ==========================
# === D - Wandering
# ==========================
"""
問題文
数列 A1,A2,A3,…,AN が与えられます。 この数列は負の要素を含むかもしれません。
数直線上の座標 0 に置かれているロボットが、以下の動作を順に行います。

正の向きに A1 進む。
正の向きに A1 進み、正の向きに A2 進む。
正の向きに A1 進み、正の向きに A2 進み、正の向きに A3 進む。
⋮正の向きに A1 進み、正の向きに A2 進み、正の向きに A3 進み、… 、正の向きに AN 進む。
動作開始時から終了時までのロボットの座標の最大値を求めてください。

制約
1≤N≤200000
−10**8≤Ai≤10**8
入力はすべて整数
"""
N = int(input())
A = list(map(int, input().split()))

ru = [0] * (N + 1)
for i in range(N):
    ru[i+1] = A[i] + ru[i]

ans = 0
pos = 0
max_ = 0
for i in range(N):
  max_ = max(max_, ru[i + 1])
  ans = max(ans, pos + max_)
  pos += ru[i+1]
print(ans)
