#此题利用dp的思路,dp数组代表着当前位置的最大和
n=int(input())
nums=list(map(int,input().split()))
lenth=len(nums)
dp=[float("-inf")]*lenth #float("-inf")代表着无穷小的数,不写为0主要因为测试用例有负数
dp[0]=nums[0] #将第一位置为数组第一个数,因为在这个位置的最大和就是他自己
for i in range(1,lenth):  #后面依次遍历,主要比较它本身和它加上前一位置最大和哪个更大
    dp[i]=max(dp[i-1]+nums[i],nums[i])
print(max(dp)) #最后返回dp数组最大的那个就行了