#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  string str;
  cin >> str;
  int n = str.size();
  int sm = 0;
  map<int, int> mp;
  string temp1, temp2, str1;
  str1.resize(n);
  for (int i = 0; i < n; i++) {
    sm += (str[i] - 48);
    mp[(str[i] - 48) % 3]++;
    str1[i] = ((str[i] - 48) % 3 + 48);
  }
  int r = sm % 3;
  if (r == 0) {
    cout << str << endl;
    return 0;
  } else if (r == 1) {
    if (mp.find(1) != mp.end()) {
      bool f = false;
      int k = -1;
      for (int i = n - 1; i >= 0; i--) {
        if (!f && str1[i] == '1') {
          f = true;
          continue;
        }
        temp1.insert(++k, 1, str[i]);
      }
      reverse(temp1.begin(), temp1.end());
      for (int i = 0; i < (int)temp1.size() - 1; i++) {
        if (temp1[i] != '0') {
          temp1.erase(0, i);
          break;
        }
        if (i + 1 == (temp1.size() - 1)) {
          temp1.erase(0, i + 1);
        }
      }
    }
    if (mp.find(2) != mp.end()) {
      int c = 0;
      int k = -1;
      for (int i = n - 1; i >= 0; i--) {
        if (c < 2 && str1[i] == '2') {
          c++;
          continue;
        }
        temp2.insert(++k, 1, str[i]);
      }
      reverse(temp2.begin(), temp2.end());
      for (int i = 0; i < (int)temp2.size() - 1; i++) {
        if (temp2[i] != '0') {
          temp2.erase(0, i);
          break;
        }
        if (i + 1 == (temp2.size() - 1)) {
          temp2.erase(0, i + 1);
        }
      }
    }
    if (temp1.size() && temp2.size()) {
      cout << (temp1.size() >= temp2.size() ? temp1 : temp2) << endl;
      return 0;
    } else if (temp1.size()) {
      cout << temp1 << endl;
      return 0;
    } else if (temp2.size()) {
      cout << temp2 << endl;
      return 0;
    }
  } else if (r == 2) {
    if (mp.find(2) != mp.end()) {
      int c = 0;
      int k = -1;
      for (int i = n - 1; i >= 0; i--) {
        if (c < 1 && str1[i] == '2') {
          c++;
          continue;
        }
        temp1.insert(++k, 1, str[i]);
      }
      reverse(temp1.begin(), temp1.end());
      for (int i = 0; i < (int)temp1.size() - 1; i++) {
        if (temp1[i] != '0') {
          temp1.erase(0, i);
          break;
        }
        if (i + 1 == (temp1.size() - 1)) {
          temp1.erase(0, i + 1);
        }
      }
    }
    if (mp.find(1) != mp.end()) {
      int c = 0;
      int k = -1;
      for (int i = n - 1; i >= 0; i--) {
        if (c < 2 && str1[i] == '1') {
          c++;
          continue;
        }
        temp2.insert(++k, 1, str[i]);
      }
      reverse(temp2.begin(), temp2.end());
      for (int i = 0; i < (int)temp2.size() - 1; i++) {
        if (temp2[i] != '0') {
          temp2.erase(0, i);
          break;
        }
        if (i + 1 == (temp2.size() - 1)) {
          temp2.erase(0, i + 1);
        }
      }
    }
    if (temp1.size() && temp2.size()) {
      cout << (temp1.size() >= temp2.size() ? temp1 : temp2) << endl;
      return 0;
    } else if (temp1.size()) {
      cout << temp1 << endl;
      return 0;
    } else if (temp2.size()) {
      cout << temp2 << endl;
      return 0;
    }
  }
  cout << "-1" << endl;
  return 0;
}
