def calculate(expression):
    result = number = 0
    sign = 1
    stack = []
    for char in expression:
        if char.isdigit():
            number = number * 10 + int(char)
        elif char in '+-':
            result += sign * number
            number = 0
            sign = 1 if char == '+' else -1
        elif char == '(':
            stack.append((result, sign))
            result, number, sign = 0, 0, 1
        elif char == ')':
            result += sign * number
            parent, parent_sign = stack.pop()
            result = parent + parent_sign * result
            number = 0
    return result + sign * number
