#include <bits/stdc++.h>
using namespace std;
string str;
int dp[100005][4][2];
int path[100005][4][2];
int hf(int pos, int mod, int st) {
  if (pos == str.length()) {
    if (st && mod == 0) return 0;
    return 1e6;
  }
  if (dp[pos][mod][st] != -1) return dp[pos][mod][st];
  if (!st) {
    if (str[pos] == '0') {
      path[pos][mod][st] = 2;
      return 1 + hf(pos + 1, mod, st);
    } else {
      int a = hf(pos + 1, (mod * 10 + (str[pos] - '0')) % 3, 1);
      int b = 1 + hf(pos + 1, mod, st);
      if (a < b)
        path[pos][mod][st] = 1;
      else
        path[pos][mod][st] = 2;
      return dp[pos][mod][st] = min(a, b);
    }
  } else {
    int a = hf(pos + 1, (mod * 10 + (str[pos] - '0')) % 3, 1);
    int b = 1 + hf(pos + 1, mod, st);
    if (a < b)
      path[pos][mod][st] = 1;
    else
      path[pos][mod][st] = 2;
    return dp[pos][mod][st] = min(a, b);
  }
}
int main() {
  cin >> str;
  memset(dp, -1, sizeof(dp));
  int a = hf(0, 0, 0);
  if (a > 1e5) {
    for (int i = 0; i < str.length(); i++) {
      if (str[i] == '0') {
        cout << 0;
        return 0;
      }
    }
    cout << "-1";
    return 0;
  }
  int pos = 0;
  int mod = 0;
  int st = 0;
  while (pos < str.length()) {
    if (path[pos][mod][st] == 2)
      pos++;
    else {
      cout << str[pos];
      st = 1;
      mod = (mod * 10 + (str[pos] - '0')) % 3;
      pos++;
    }
  }
}
