By using dynamic programming, we can solve this! Negative values also work.
Let's start off with the subproblems. We would like to know $OPT(i,j)$, the maximum value of a consecutive subsequence from index $i$ to index $j$.
Then the recurrence equation looks like this:
$$
\begin{equation}
OPT(i,j)=\begin{cases}
v_i
& \text{if $i=j$,}\\
\max \{ OPT(i,k) * OPT(k + 1,j), OPT(i,k) + OPT(k + 1,j) \mid i \le k \lt j \}
& \text{else}.
\end{cases}
\end{equation}
$$
The base case takes care of returning the value at index $i$ itself. If $i \neq j$, we split the substring into two parts at index $k$. We either take the product of the maximum values of those two parts, or we take the sum of them.
Now for the original problem, we have $OPT(0, n-1)$.
The order is guaranteed, since the problem is split up into smaller subproblems from left to right, until no subproblem can be found.
The time complexity of this algorithm with memorization can at most be the time it takes per subproblem = $O(n)$, and the amount of times we call this, $O(n)$. So $T(n) = O(n^2)$.