Given an array **arr[]** consisting of **N** positive integers, the task is to find the maximum possible sum of the remaining array elements after repeatedly removing the any of the two elements whose concatenation is a multiple of **3**.

**Examples:**

Input:arr[] = {23, 12, 43, 3, 56}Output:91Explanation:

Initially the array is {23, 12, 43, 3, 56}. Following removal of array elements are performed:

Pair {23, 43}:Concatenation = 2343, which is divisible by 3. Now, removing 43 modifies the array to {23, 12, 3, 56}.Pair {12, 3}:Concatenation = 123, which is divisible by 3. Now, removing 3 modifies the array to {23, 12, 56}.After the above operations, sum of the array elements = 12 + 56 + 23 = 91.

Input:arr[] = {324, 32, 53, 67, 330}Output:415

**Approach:** The given problem can be solved by using the fact that the remainder of a number, when divided by **3**, is equal to the remainder of the sum of its digits when divided by **3**.** **Follow the steps below to solve the problem:

- Initialize three variables, say
**maxRem0**,**maxRem1**, and**maxRem2**, to store the element having remainder as**0**,**1**, and**2**respectively. - Traverse the given array
**arr[]**and perform the following steps:- Initialize a variable,
**digitSum**to store the digit sum. - If
**digitSum % 3 == 0**, then update the value of**maxRem0**as**max(maxRem0, arr[i])**. - Otherwise, if the remainder is
**1**or**2**, then

- Initialize a variable,
- After completing the above steps, print the sum of
**maxRem0**and the maximum value of**maxRem1**and**maxRem2**as the result.

Below is the implementation of the above approach:

## Java

`// Java approach for the above approach` `class` `GFG{` `// Function to calculate sum` `// of digits of an integer` `static` `int` `getSum(` `int` `n)` `{` ` ` `int` `ans = ` `0` `;` ` ` `char` `[] arr = (String.valueOf(n)).toCharArray();` ` ` ` ` `for` `(` `char` `ch : arr)` ` ` `{` ` ` `ans += Character.getNumericValue(ch);` ` ` `}` ` ` `return` `ans;` `}` `// Function to calculate maximum sum` `// of array after removing pairs whose` `// concatenation is divisible by 3` `static` `void` `getMax(` `int` `[] arr)` `{` ` ` ` ` `// Stores the sum of` ` ` `// digits of array element` ` ` `int` `maxRem0 = ` `0` `;` ` ` `int` `rem1 = ` `0` `;` ` ` `int` `rem2 = ` `0` `;` ` ` `for` `(` `int` `i:arr)` ` ` `{` ` ` ` ` `// Find the sum of digits` ` ` `int` `digitSum = getSum(i);` ` ` `// If i is divisible by 3` ` ` `if` `(digitSum % ` `3` `== ` `0` `)` ` ` `maxRem0 = Math.max(maxRem0, i);` ` ` `// Otherwise, if i modulo 3 is 1` ` ` `else` `if` `(digitSum % ` `3` `== ` `1` `)` ` ` `rem1 += i;` ` ` `// Otherwise, if i modulo 3 is 2` ` ` `else` ` ` `rem2 += i;` ` ` `}` ` ` ` ` `// Return the resultant` ` ` `// sum of array elements` ` ` `System.out.print(maxRem0 +` ` ` `Math.max(rem1, rem2));` `}` `// Driver Code` `public` `static` `void` `main(String[] args)` `{` ` ` `int` `[] arr = { ` `23` `, ` `12` `, ` `43` `, ` `3` `, ` `56` `};` ` ` `getMax(arr);` `}` `}` `// This code is contributed by abhinavjain194` |

## Python3

`# Python3 program for the above approach` `# Function to calculate sum` `# of digits of an integer` `def` `getSum(n):` ` ` `ans ` `=` `0` ` ` `for` `i ` `in` `str` `(n):` ` ` `ans ` `+` `=` `int` `(i)` ` ` ` ` `return` `ans` `# Function to calculate maximum sum` `# of array after removing pairs whose` `# concatenation is divisible by 3` `def` `getMax(arr):` ` ` ` ` `# Stores the sum of` ` ` `# digits of array element` ` ` `maxRem0 ` `=` `0` ` ` ` ` `rem1 ` `=` `0` ` ` `rem2 ` `=` `0` ` ` `for` `i ` `in` `arr:` ` ` ` ` `# Find the sum of digits` ` ` `digitSum ` `=` `getSum(i)` ` ` ` ` `# If i is divisible by 3` ` ` `if` `digitSum ` `%` `3` `=` `=` `0` `:` ` ` `maxRem0 ` `=` `max` `(maxRem0, i)` ` ` ` ` `# Otherwise, if i modulo 3 is 1` ` ` `elif` `digitSum ` `%` `3` `=` `=` `1` `:` ` ` `rem1 ` `+` `=` `i` ` ` ` ` `# Otherwise, if i modulo 3 is 2` ` ` `else` `:` ` ` `rem2 ` `+` `=` `i` ` ` ` ` `# Return the resultant` ` ` `# sum of array elements` ` ` `print` `( maxRem0 ` `+` `max` `(rem1, rem2))` `# Driver Code` `# Given array` `arr ` `=` `[ ` `23` `, ` `12` `, ` `43` `, ` `3` `, ` `56` `]` `getMax(arr)` |

**Output:**

91

**Time Complexity:** O(N)**Auxiliary Space:** O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the **Essential Maths for CP Course** at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**