FreeRTOS and 3 UARTS
Use DMA with IDLE detection, don't process data in interrupts. Your interrupt handler just signals your tasks, that IDLE has been detected and returns number of characters and pointer to the buffer to task responsible for processing it. Tasks just process the data or sleep, if all is done. 

Note, that you'll have to implement IDLE detection yourself, for STM HAL does not do that yet. But I've seen in forums patches for this.