def maxSubarraySumCircular(nums):
    if not nums:
        return 0

    # 初始化变量
    total_sum = 0
    max_sum = float("-inf")
    min_sum = float("inf")
    current_max = 0
    current_min = 0

    for num in nums:
        # 计算数组的总和
        total_sum += num

        # 计算最大子数组和
        current_max = max(num, current_max + num)
        max_sum = max(max_sum, current_max)

        # 计算最小子数组和
        current_min = min(num, current_min + num)
        min_sum = min(min_sum, current_min)

    # 情况1:最大子数组和不跨越环形边界
    case1 = max_sum

    # 情况2:最大子数组和跨越环形边界
    case2 = total_sum - min_sum if total_sum != min_sum else max_sum

    # 返回两种情况的最大值
    return max(case1, case2)


# 输入处理
n = int(input())
nums = list(map(int, input().split()))
# 输出结果
print(maxSubarraySumCircular(nums))