#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <map>
using namespace std;

long long int tonum(string str){
  int s=0,e=0;
  for(; e<(int)str.length(); e++){
    if(str[e]=='(') s=e+1;
    if(str[e]==')') break;
  }
  return stoll(str.substr(s,e-s));
}

long long int binop(long long int a, long long int b, char op){
  if(op=='+') return a+b;
  if(op=='-') return a-b;
  if(op=='*') return a*b;
  return -1;
}

long long int calc(string str, int i, int j, int k){
  vector<long long int> nums;
  int s=0;
  int depth=0;
  bool onlynum=true;
  for(int d=0; d<(int)str.length(); d++){
    if(str[d]=='+' || str[d]=='-' || str[d]=='*'){
      onlynum=false;
      if(depth==0){
        if(str[s]=='('){
          nums.push_back( calc(str.substr(s+1, d-s-2), i,j,k));
        }else{
          nums.push_back( calc(str.substr(s,d-s), i,j,k) );
        }
        nums.push_back( str[d] );
        s = d+1;
      }
    }
    if(str[d]=='(') depth++;
    if(str[d]==')') depth--;
  }

  if(onlynum) return tonum(str);
  if(str[s]=='('){
    nums.push_back( calc(str.substr(s+1,(int)str.length()-s-2), i,j,k));
  }else{
    nums.push_back( calc(str.substr(s,(int)str.length()-s), i,j,k) );
  }

  map<char,int> oppr;
  oppr['+']=i;
  oppr['-']=j;
  oppr['*']=k;
  for(int i=0; i<3; i++){
    int nowop=1;
    while(nowop<(int)nums.size()){
      if(oppr[nums[nowop]] == i){
        nums[nowop-1] = binop(nums[nowop-1], nums[nowop+1], (char)nums[nowop]);
        nums.erase(nums.begin()+nowop);
        nums.erase(nums.begin()+nowop);
      }else{
        nowop+=2;
      }
    }
  }

  return nums[0];
}

int main(){
  string str;
  cin >> str;

  long long int ans = -9223372036854775807;
  for(int i=0; i<3; i++){
    for(int j=0; j<3; j++){
      for(int k=0; k<3; k++){
        ans = max(ans, calc(str,i,j,k));
      }
    }
  }
  cout << ans << endl;

  return 0;
}